# 클린 코드 - 주석, 포맷팅

# 주석

모든 내용을 주석으로 넣게 되면 코드가 지저분할 수 있습니다. 대부분은 좋은 Naming으로 충분히 해결이 가능합니다.

네이밍으로 표현할 수 없는 영역은 주석으로 표현해주면 됩니다

  • 법적인 정보를 담을 때

    # Copyright (C) 2021 ...
    
  • 의도를 명확하게 설명할 때

    # throughput을 늘리기 위해 스레드를 10개까지 늘린다.
    for idx in range(10):
        thread = threading.Thread(target=...)
        thread.start()
    ...
    
  • 중요성을 강조할 때

    # 최종 결제를 하기 전에 진행해야 하는 validation 함수 
    def validate_buyable(wallet, price, ...):
        ...
    
  • 결과를 경고할 때

    # WARNING: API 서버가 항상 양호한지 알 수 없음.
    def connect_api_server():
        ...
    

# 관용적으로 사용되는 키워드

TODO : 당장은 아니지만 다음에 해야 할 때

FIXME : 치명적인 에러를 발생하는 코드는 아니지만 수정해야 할 때

XXX : 더 생각해볼 필요가 있을 때

# TODO@grab: 객체의 책임 더 분리하기
class GrabStore:
    ...
    # FIXME: 반복문의 depth를 줄이기 
    def sell_food(self):
        for food in food_list:
            for discount in discount_list:
                ...

# 포맷팅

# Vertical Formatting

  • 한 파일에 코드를 다 넣지 말고, 개념에 맞게 파일을 나눠서 사용합니다.

    # as-is 
    # store.py에 전부 있음
    class FruitsStore:
        ...
    
    class ComputerStore:
        ...
    
    # to-be
    # fruit_store.py
    class FruitsStore:
        ...
    
    # computer_store.py
    class ComputerStore:
        ...
    
  • 다른 개념의 코드는 Spacing으로 분리하기

  • 비슷한 개념의 코드는 붙여서 사용하기

    def test_user_buy_product():
        user = User()
        product = Product()
        
        product.set_sold_out(True)
        user.get(product)
        
        assert result == "success"
    

# Horizontal Formatting

  • 한 줄에 코드를 다 넣기보단 변수 등을 활용해서 가독성 높이기

    #as-is
    product_list.extend([Product("모니터"), Product("키보드"), Product("노트북")])
    
    #to-be
    items = [Product("모니터"), Product("키보드"), Product("노트북")]
    product_list.extend(items)
    
  • 네이밍 잘해서 길이 줄이기

    user_with_name_and_email = User("그랩", "grab@world.com")
    
    #to-be
    user = User("그랩", "grab@world.com")
    
    
Last Updated: 2/20/2022, 1:51:31 PM

CC-BY-NC-ND-4.0 Licensed | Copyright © 2021-present Grab